package fr.cie.blog.modeldao.sql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import fr.cie.blog.beans.Card;
import fr.cie.blog.beans.Interest;
import fr.cie.blog.domainservice.IServiceInterest;
import fr.cie.blog.modeldao.services.GestionBaseDeDonnees;
import fr.cie.blog.modeldao.services.Mapper;

/**
 * @author Jee3
 * 
 */
public class InterestDaoImplSql extends ModelDAO implements IServiceInterest {
	/**
	 * Log4J the logger.
	 */
	private static final Logger LOG = Logger.getLogger(CountryDaoImplSql.class);

	// ===================================================================== //
	// Sql Properties
	// ===================================================================== //

	/**
	 * mapper ORM Relation to Object.
	 */
	private final Mapper mapper = new Mapper();

	/**
	 * connection.
	 */
	private Connection connection = null;

	/**
	 * result.
	 */
	private ResultSet result = null;

	/**
	 * request.
	 */
	private PreparedStatement request = null;

	/**
	 * stringRequest.
	 */
	private String stringRequest = null;

	// ===================================================================== //
	// Properties business Object Country
	// ===================================================================== //

	/**
	 * interest.
	 */
	private Interest interest;

	/**
	 * interestList.
	 */
	private List<Interest> interestList;

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.cie.blog.domainservice.IServiceGeneric#save(java.lang.Object)
	 */
	@Override
	public final int save(final Interest interst) {
		// TODO Auto-generated method stub
		return 0;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.cie.blog.domainservice.IServiceGeneric#delete(java.lang.Object)
	 */
	@Override
	public final int delete(final Interest interst) {
		// TODO Auto-generated method stub
		return 0;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.cie.blog.domainservice.IServiceGeneric#findAll()
	 */
	@Override
	public final List<Interest> findAll() {
		// Variables
		PreparedStatement pRequete = null;
		Interest pInterest;
		String pRequeteString;
		final List<Interest> pInterestList =
				new ArrayList<Interest>();

		try {
			// Ouverture d'une connexion
			connection = super.getConnection();
			
			// requete pour la liste des clients
			pRequeteString = "SELECT * FROM interest"
					+ " WHERE 1 ORDER BY name";
			pRequete = connection.prepareStatement(pRequeteString);

			// Execution de la requête
			result = pRequete.executeQuery();

			// On stocke le resultat dans une liste
			if (result != null) {
				while (result.next()) {
					// On effectue le mapping des attributs avec les champs de
					// la table SQL
					pInterest = mapper.mapperInterest(result);

					// On ajoute l'objet a la liste des clients
					pInterestList.add(pInterest);
				}
			}
		} catch (final Exception e) {
			LOG.debug("Erreur dans la requete dans la "
					+ "classe InterestDaoImplSql fonction findAll" + e);
		} finally {
			try {
				// Fermeture de la connexion
				if (result != null) {
					GestionBaseDeDonnees.getInstance().closeResulset(result);
				}
				if (pRequete != null) {
					GestionBaseDeDonnees.getInstance().closeRequest(pRequete);
				}
				if (connection != null) {
					GestionBaseDeDonnees.getInstance().closeConnection(
							connection);
				}
			} catch (final Exception ex) {
				LOG.debug("Erreur lors de la fermeture de la connexion avec la "
						+ "base de données dans la classe InterestDaoImplSql "
						+ "fonction findAll" + ex);
			}
		}

		// Retourner la liste des clients

		return pInterestList;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * fr.cie.blog.domainservice.IServiceInterest#findByCard(fr.cie.blog.beans
	 * .Card)
	 */
	@Override
	public final List<Interest> findByCard(final Card pCard) {
		// TODO Auto-generated method stub
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.cie.blog.domainservice.IServiceGeneric#findById(int)
	 */
	@Override
	public final Interest findById(final long pIdentifier) {
		// TODO Auto-generated method stub
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.cie.blog.domainservice.IServiceGeneric#update(java.lang.Object)
	 */
	@Override
	public final int update(final Interest interst) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public final List<Interest> findById(final List<Integer> pIdList) {
		// TODO Auto-generated method stub
		return null;
	}

}